package com.yjz.proxy.cglibproxy;

import org.junit.Test;
import org.springframework.cglib.proxy.Enhancer;

public class CglibTest {

  @Test
  public void testCglib() {
    DaoProxy daoProxy = new DaoProxy();

    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(Dao.class);
    enhancer.setCallback(daoProxy);

    Dao dao = (Dao) enhancer.create();
    //类自己的方法
    dao.update();
    dao.select();
    //实现的接口的方法
    dao.play();
    //接口default方法也会被代理
    dao.eat();
    //final方法不会被代理，因为是final
    dao.sign();


    /**
     * cglib代理： 目标类的所有方法都会被代理（除了final方法）
     * jdk代理： 只能代理目标类父类接口的方法
     */
  }
}
